package com.Hermes.User;


import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.SneakyThrows;

import javax.crypto.IllegalBlockSizeException;
import java.io.File;
import java.util.ArrayList;
import java.util.concurrent.ConcurrentHashMap;

public class Arrlist {
    private final ConcurrentHashMap<Long, Long> ii2i;
    public ArrayList<Arr> data;

    public Arrlist(Floyd_Warshall _fw, ArrayList<node> apl, PRF_PRP_Hash pph, DX dx, PreEnc preEnc, ConcurrentHashMap<Long, Long> ii2i) throws IllegalBlockSizeException {
        data = new ArrayList<>();
        PD_oracle pdo = _fw.getPd_oracle();
        this.ii2i = ii2i;
        for (int i = 0; i < apl.size(); i++) {
//            long prenodest=System.currentTimeMillis();
            node tmpNode = apl.get(i);
            Arr tmpArr = new Arr(tmpNode, pph, _fw, pdo, apl, preEnc, ii2i);
//           byte[] nodemsgt2=new BigDecimal(tmpNode.id).toBigInteger().toByteArray(),nodetagt2=new[nodemsgt2.length];
            int index = dx.get_addr(tmpNode);
            tmpArr.buildArr();
            data.add(index, tmpArr);
        }

    }

//    public static void main(String[] args) throws FactoriesException, NoSuchAlgorithmException, InvalidKeyException, IllegalBlockSizeException {
//        long prest = System.currentTimeMillis();
//        ArrayList<node> apl = new ArrayList<>();
//        node n1;
//        node n5;
//        node n2;
//        node n4;
//        {
//            n1 = new node();
////            n1.id = n1.hashCode();
//            n1.point = new Point(4533, 5654);
//            apl.add(n1);
//            n2 = new node();
////            n2.id = n2.hashCode();
//            n2.point = new Point(2313, 5343);
//            apl.add(n2);
//            node n3 = new node();
////            n3.id = n3.hashCode();
//            n3.point = new Point(3523, 5622);
//            apl.add(n3);
//            n4 = new node();
////            n4.id = n4.hashCode();
//            n4.point = new Point(4223, 5621);
//            apl.add(n4);
//            n5 = new node();
////            n5.id = n5.hashCode();
//            n5.point = new Point(3555, 5123);
//            apl.add(n5);
//            node n6 = new node();
////            n6.id = n6.hashCode();
//            n6.point = new Point(3111, 1115);
//            apl.add(n6);
//            node n7 = new node();
////            n7.id = n7.hashCode();
//            n7.point = new Point(3795, 9975);
//            apl.add(n7);
//            node n8 = new node();
////            n8.id = n8.hashCode();
//            n8.point = new Point(3142, 4423);
//            apl.add(n8);
//            node n9 = new node();
////            n9.id = n9.hashCode();
//            n9.point = new Point(3656, 2225);
//            apl.add(n9);
//        }//加点
//        ArrayList<Integer> query = new ArrayList<>();
//        query.add(n1.id);
//        query.add(n2.id);
//        query.add(n5.id);
//        query.add(n4.id);
//        PD_oracle pd_oracle = new PD_oracle();
//        Floyd_Warshall fw = new Floyd_Warshall(apl, pd_oracle);
//        Omega omega = new Omega();
//        SK sk = new SK();
//        PK pk = omega.Gen(256, sk);
//        PRF_PRP_Hash pph;
//        pph = new PRF_PRP_Hash(256, sk);
//        long preet = System.currentTimeMillis();
//        System.out.println("预处理(preet-prest) = " + (preet - prest) + "ms");
//        DX dx = new DX(pph);
//        for (int i = 0; i < apl.size(); i++) {
//            node tmp = apl.get(i);
//            dx.add(tmp);
//        }
//        Arrlist arrlist = new Arrlist(fw, apl, pph, omega, pk, dx);
//
//        long dxet = System.currentTimeMillis();
//        System.out.println("EncGraph(dxet-preet) = " + (dxet - preet) + "ms");
//        QueryTokenGen Gentoken = new QueryTokenGen(pph, query);
////            var token = Gentoken.getData();
//
//    }

    @SneakyThrows
    public void WriteArrList(String fillName) {
        ObjectMapper mapper=new ObjectMapper();
        String s = mapper.writeValueAsString(data);
        mapper.writeValue(new File(fillName),s);
    }


}
